<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>Using Google Health - Zend Framework Manual</title>

    <link href="../css/shCore.css" rel="stylesheet" type="text/css" />
    <link href="../css/shThemeDefault.css" rel="stylesheet" type="text/css" />
    <link href="../css/styles.css" media="all" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Zend Framework</h1>
<h2>Programmer's Reference Guide</h2>
<ul>
    <li><a href="../en/zend.gdata.health.html">Inglês (English)</a></li>
    <li><a href="../pt-br/zend.gdata.health.html">Português Brasileiro (Brazilian Portuguese)</a></li>
</ul>
<table width="100%">
    <tr valign="top">
        <td width="85%">
            <table width="100%">
                <tr>
                    <td width="25%" style="text-align: left;">
                    <a href="zend.gdata.docs.html">Using Google Documents List Data API</a>
                    </td>

                    <td width="50%" style="text-align: center;">
                        <div class="up"><span class="up"><a href="zend.gdata.html">Zend_Gdata</a></span><br />
                        <span class="home"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></span></div>
                    </td>

                    <td width="25%" style="text-align: right;">
                        <div class="next" style="text-align: right; float: right;"><a href="zend.gdata.spreadsheets.html">Using Google Spreadsheets</a></div>
                    </td>
                </tr>
            </table>
<hr />
<div id="zend.gdata.health" class="section"><div class="info"><h1 class="title">Using Google Health</h1></div>
    

    <p class="para">
        The Google Health Data <acronym class="acronym">API</acronym> is designed to enable developers to do two
        things:

        <ul class="itemizedlist">
            <li class="listitem">
                <p class="para">
                    Read a user&#039;s Google Health profile or query for medical records that match
                    particular criteria and then use the results to provide personalized
                    functionality based on the data.
                </p>
            </li>

            <li class="listitem">
                <p class="para">
                    Add new medical records to a user&#039;s profile by including CCR data when sending a
                    notice to a user&#039;s profile. Note: The CCR data is stored as an
                    <acronym class="acronym">XML</acronym> blob within the &lt;atom&gt; entry. The library does not
                    provide direct accessors to the object model but it does have helpers for
                    extracting specific fields.
                </p>
            </li>
        </ul>
    </p>

    <p class="para">
        There are three main feeds, each of which requires authentication. Unlike other Google Data
        <acronym class="acronym">API</acronym>s, each Google Health feed has a limited set of
        <acronym class="acronym">HTTP</acronym> operations you can perform on it, depending on which authentication
        method you are using (ClientLogin or AuthSub/OAuth). For a list of permitted operations, see
        <a href="http://code.google.com/apis/health/reference.html#Authentication" class="link external">&raquo; http://code.google.com/apis/health/reference.html#Authentication</a>.

        <ul class="itemizedlist">
            <li class="listitem">
                <p class="para">
                  <b class="firstterm">Profile Feed</b>
                  use the profile feed to query a user&#039;s health profile for specific information.
                </p>
            </li>

            <li class="listitem">
                <p class="para">
                  <b class="firstterm">Register Feed</b>
                  use the register feed to reconcile new CCR data into a profile.
                </p>
            </li>

            <li class="listitem">
                <p class="para">
                  <b class="firstterm">Profile List Feed</b> the profile list feed should be used to
                  determine which of the user&#039;s Health profiles to interact with. This feed is only
                  available when using ClientLogin.
                </p>
            </li>
        </ul>
    </p>

    <p class="para">
        See <a href="http://code.google.com/apis/health/" class="link external">&raquo; http://code.google.com/apis/health</a>
        for more information about the Google Health <acronym class="acronym">API</acronym>.
    </p>

    <div class="section" id="zend.gdata.health.connect"><div class="info"><h1 class="title">Connect To The Health Service</h1></div>
        

        <p class="para">
            The Google Health <acronym class="acronym">API</acronym>, like all Google Data <acronym class="acronym">API</acronym>s,
            is based off of the Atom Publishing Protocol (APP), an <acronym class="acronym">XML</acronym> based
            format for managing web-based resources. Traffic between a client and the Google Health
            servers occurs over <acronym class="acronym">HTTP</acronym> and allows for authenticated connections.
        </p>

        <p class="para">
            Before any transactions can occur, a connection needs to be made. Creating a connection
            to the Health servers involves two steps: creating an <acronym class="acronym">HTTP</acronym> client and
            binding a <span class="classname">Zend_Gdata_Health</span> service instance to that client.
        </p>

        <div class="section" id="zend.gdata.health.connect.authentication"><div class="info"><h1 class="title">Authentication</h1></div>
            

            <p class="para">
                The Google Health <acronym class="acronym">API</acronym> allows programmatic access to a user&#039;s
                Health profile. There are three authentication schemes that are supported by Google
                Health:
            </p>

            <ul class="itemizedlist">
                <li class="listitem">
                    <p class="para">
                        <b class="firstterm">ClientLogin</b> provides direct username/password
                        authentication to the Health servers. Since this method requires that users
                        provide your application with their password, this authentication scheme is
                        only recommended for installed/desktop applications.
                    </p>
                </li>

                <li class="listitem">
                    <p class="para">
                        <b class="firstterm">AuthSub</b> allows a user to authorize the sharing of
                        their private data. This provides the same level of convenience as
                        ClientLogin but without the security risk, making it an ideal choice for
                        web-based applications. For Google Health, AuthSub must be used in
                        registered and secure mode--meaning that all requests to the
                        <acronym class="acronym">API</acronym> must be digitally signed.
                    </p>
                </li>

                <li class="listitem">
                    <p class="para">
                        <b class="firstterm">OAuth</b> is an alternative to AuthSub. Although this
                        authentication scheme is not discussed in this document, more information
                        can be found in the <a href="http://code.google.com/apis/health/developers_guide_protocol.html#OAuth" class="link external">&raquo; Health
                            Data <acronym class="acronym">API</acronym> Developer&#039;s Guide</a>.
                    </p>
                </li>
            </ul>

            <p class="para">
                See <a href="http://code.google.com/apis/gdata/auth.html" class="link external">&raquo; Authentication Overview in the
                    Google Data <acronym class="acronym">API</acronym> documentation</a> for more
                information on each authentication method.
            </p>
        </div>

        <div class="section" id="zend.gdata.health.connect.service"><div class="info"><h1 class="title">Create A Health Service Instance</h1></div>
            

            <p class="para">
                In order to interact with Google Health, the client library provides the
                <span class="classname">Zend_Gdata_Health</span> service class. This class provides a common
                interface to the Google Data and Atom Publishing Protocol models and assists in
                marshaling requests to and from the Health <acronym class="acronym">API</acronym>.
            </p>

            <p class="para">
                Once you&#039;ve decided on an authentication scheme, the next step is to create an
                instance of <span class="classname">Zend_Gdata_Health</span>. This class should be passed an
                instance of <span class="classname">Zend_Gdata_HttpClient</span>. This provides an interface
                for AuthSub/OAuth and ClientLogin to create a special authenticated
                <acronym class="acronym">HTTP</acronym> client.
            </p>

            <p class="para">
                To test against the H9 Developer&#039;s (/h9) instead of Google Health (/health), the
                <span class="classname">Zend_Gdata_Health</span> constructor takes an optional third
                argument for you to specify the H9 service name &#039;weaver&#039;.
            </p>

            <p class="para">
                The example below shows how to create a Health service class using ClientLogin
                authentication:
            </p>

            <pre class="programlisting brush: php">
// Parameters for ClientLogin authentication
$healthServiceName = Zend_Gdata_Health::HEALTH_SERVICE_NAME;
//$h9ServiceName = Zend_Gdata_Health::H9_SANDBOX_SERVICE_NAME;
$user = &quot;user@gmail.com&quot;;
$pass = &quot;pa$$w0rd&quot;;

// Create an authenticated HTTP client
$client = Zend_Gdata_ClientLogin::getHttpClient($user,
                                                $pass,
                                                $healthServiceName);

// Create an instance of the Health service
$service = new Zend_Gdata_Health($client);
</pre>


            <p class="para">
                A Health service using AuthSub can be created in a similar, though slightly more
                lengthy fashion. AuthSub is the recommend interface to communicate with Google
                Health because each token is directly linked to a specific profile in the user&#039;s
                account. Unlike other Google Data <acronym class="acronym">API</acronym>s, it is required that all
                requests from your application be digitally signed.
            </p>

            <pre class="programlisting brush: php">
/*
 * Retrieve the current URL so that the AuthSub server knows where to
 * redirect the user after authentication is complete.
 */
function getCurrentUrl() {
    $phpRequestUri = htmlentities(substr($_SERVER[&#039;REQUEST_URI&#039;],
                                         0,
                                         strcspn($_SERVER[&#039;REQUEST_URI&#039;],
                                                 &quot;\n\r&quot;)),
                                  ENT_QUOTES);

    if (isset($_SERVER[&#039;HTTPS&#039;]) &amp;&amp; strtolower($_SERVER[&#039;HTTPS&#039;]) == &#039;on&#039;) {
        $protocol = &#039;https://&#039;;
    } else {
        $protocol = &#039;http://&#039;;
    }
    $host = $_SERVER[&#039;HTTP_HOST&#039;];
    if ($_SERVER[&#039;SERVER_PORT&#039;] != &#039;&#039; &amp;&amp;
       (($protocol == &#039;http://&#039; &amp;&amp; $_SERVER[&#039;SERVER_PORT&#039;] != &#039;80&#039;) ||
       ($protocol == &#039;https://&#039; &amp;&amp; $_SERVER[&#039;SERVER_PORT&#039;] != &#039;443&#039;))) {
        $port = &#039;:&#039; . $_SERVER[&#039;SERVER_PORT&#039;];
    } else {
        $port = &#039;&#039;;
    }
    return $protocol . $host . $port . $phpRequestUri;
}

/*
 * Redirect a user to AuthSub if they do not have a valid session token.
 * If they&#039;re coming back from AuthSub with a single-use token, instantiate
 * a new HTTP client and exchange the token for a long-lived session token
 * instead.
 */
function setupClient($singleUseToken = null) {
    $client = null;

    // Fetch a new AuthSub token?
    if (!$singleUseToken) {
        $next = getCurrentUrl();
        $scope = &#039;https://www.google.com/health/feeds&#039;;
        $authSubHandler = &#039;https://www.google.com/health/authsub&#039;;
        $secure = 1;
        $session = 1;
        $authSubURL =  Zend_Gdata_AuthSub::getAuthSubTokenUri($next,
                                                              $scope,
                                                              $secure,
                                                              $session,
                                                              $authSubHandler);

         // 1 - allows posting notices &amp;&amp; allows reading profile data
        $permission = 1;
        $authSubURL .= &#039;&amp;permission=&#039; . $permission;

        echo &#039;&lt;a href=&quot;&#039; . $authSubURL . &#039;&quot;&gt;Your Google Health Account&lt;/a&gt;&#039;;
    } else {
        $client = new Zend_Gdata_HttpClient();

        // This sets your private key to be used to sign subsequent requests
        $client-&gt;setAuthSubPrivateKeyFile(&#039;/path/to/your/rsa_private_key.pem&#039;,
                                          null,
                                          true);

        $sessionToken =
            Zend_Gdata_AuthSub::getAuthSubSessionToken(trim($singleUseToken),
                                                       $client);

        // Set the long-lived session token for subsequent requests
        $client-&gt;setAuthSubToken($sessionToken);
    }
    return $client;
}

// -&gt; Script execution begins here &lt;-

session_start();

$client = setupClient(@$_GET[&#039;token&#039;]);

// Create an instance of the Health service
$userH9Sandbox = false;
$healthService = new Zend_Gdata_Health($client,
                                       &#039;googleInc-MyTestAppName-v1.0&#039;,
                                       $userH9Sandbox);
</pre>


            <p class="para">
                NOTE: the remainder of this document will assume you are using AuthSub for
                authentication.
            </p>
        </div>
    </div>

    <div class="section" id="zend.gdata.health.profilefeed"><div class="info"><h1 class="title">Profile Feed</h1></div>
        

        <p class="para">
            To query the user&#039;s profile feed, make sure your initial AuthSub token was requested
            with the <span class="property">permission</span> parameter set to <em class="emphasis">1</em>. The
            process of extracting data from the profile requires two steps, sending a query and
            iterating through the resulting feed.
        </p>

        <div class="section" id="zend.gdata.health.profilefeed.query"><div class="info"><h1 class="title">Send a Structured Query</h1></div>
            

            <p class="para">
                You can send structured queries to retrieve specific records from a user&#039;s profile.
            </p>

            <p class="para">
                When retrieving the profile using the Health <acronym class="acronym">API</acronym>, specifically
                constructed query <acronym class="acronym">URL</acronym>s are used to describe what (CCR) data
                should be returned. The <span class="classname">Zend_Gdata_Health_Query</span> class helps
                simplify this task by automatically constructing a query <acronym class="acronym">URL</acronym>
                based on the parameters you set.
            </p>

            <div class="section" id="zend.gdata.health.profilefeed.query.construct"><div class="info"><h1 class="title">Query The Feed</h1></div>
                

                <p class="para">
                    To execute a query against the profile feed, invoke a new instance of an
                    <span class="classname">Zend_Gdata_Health_Query</span> and call the service&#039;s
                     <span class="methodname">getHealthProfileFeed()</span> method:
                </p>

                <pre class="programlisting brush: php">
$healthService = new Zend_Gdata_Health($client);

// example query for the top 10 medications with 2 items each
$query = new Zend_Gdata_Health_Query();
$query-&gt;setDigest(&quot;true&quot;);
$query-&gt;setGrouped(&quot;true&quot;);
$query-&gt;setMaxResultsGroup(10);
$query-&gt;setMaxResultsInGroup(2);
$query-&gt;setCategory(&quot;medication&quot;);

$profileFeed = $healthService-&gt;getHealthProfileFeed($query);
</pre>


                <p class="para">
                    Using  <span class="methodname">setDigest(&quot;true&quot;)</span> returns all of user&#039;s CCR data
                    in a single Atom <em class="emphasis">&lt;entry&gt;</em>.
                </p>

                <p class="para">
                    The  <span class="methodname">setCategory()</span> helper can be passed an additional
                    parameter to return more specific CCR information. For example, to return just
                    the medication Lipitor, use
                     <span class="methodname">setCategory(&quot;medication&quot;, &quot;Lipitor&quot;)</span>. The same
                    methodology can be applied to other categories such as conditions, allergies,
                    lab results, etc.
                </p>

                <p class="para">
                    A full list of supported query parameters is available in the <a href="http://code.google.com/apis/health/reference.html#Parameters" class="link external">&raquo; query
                        parameters section</a> of the Health <acronym class="acronym">API</acronym> Reference
                    Guide.
                </p>
            </div>
        </div>

        <div class="section" id="zend.gdata.health.profilefeed.iterate"><div class="info"><h1 class="title">Iterate Through The Profile Entries</h1></div>
            

            <p class="para">
                Each Google Health entry contains CCR data, however, using the
                <span class="property">digest</span> query parameter and setting is to
                <b><tt>TRUE</tt></b> will consolidate all of the CCR elements
                (that match your query) into a single Atom <em class="emphasis">&lt;entry&gt;</em>.
            </p>

            <p class="para">
                To retrieve the full CCR information from an entry, make a call to the
                <span class="classname">Zend_Gdata_Health_ProfileEntry</span> class&#039;s
                 <span class="methodname">getCcr()</span> method. That returns a
                <span class="classname">Zend_Gdata_Health_Extension_CCR</span>:
            </p>

            <pre class="programlisting brush: php">
$entries = $profileFeed-&gt;getEntries();
foreach ($entries as $entry) {
    $medications = $entry-&gt;getCcr()-&gt;getMedications();
    //$conditions = $entry-&gt;getCcr()-&gt;getConditions();
    //$immunizations = $entry-&gt;getCcr()-&gt;getImmunizations();

    // print the CCR xml (this will just be the entry&#039;s medications)
    foreach ($medications as $med) {
        $xmlStr = $med-&gt;ownerDocument-&gt;saveXML($med);
        echo &quot;&lt;pre&gt;&quot; . $xmlStr . &quot;&lt;/pre&gt;&quot;;
    }
}
</pre>


            <p class="para">
                Here, the  <span class="methodname">getCcr()</span> method is used in conjunction with a
                magic helper to drill down and extract just the medication data from the entry&#039;s
                CCR. The formentioned magic helper takes the form
                 <span class="methodname">getCATEGORYNAME()</span>, where <b><tt>CATEGORYNAME</tt></b>
                is a supported Google Health category. See the <a href="http://code.google.com/apis/health/reference.html#CatQueries" class="link external">&raquo; Google Health
                    reference Guide</a> for the possible categories.
            </p>

            <p class="para">
                To be more efficient, you can also use category queries to only return the necessary
                CCR from the Google Health servers. Then, iterate through those results:
            </p>

            <pre class="programlisting brush: php">
$query = new Zend_Gdata_Health_Query();
$query-&gt;setDigest(&quot;true&quot;);
$query-&gt;setCategory(&quot;condition&quot;);
$profileFeed = $healthService-&gt;getHealthProfileFeed($query);

// Since the query contained digest=true, only one Atom entry is returned
$entry = $profileFeed-&gt;entry[0];
$conditions = $entry-&gt;getCcr()-&gt;getConditions();

// print the CCR xml (this will just be the profile&#039;s conditions)
foreach ($conditions as $cond) {
    $xmlStr = $cond-&gt;ownerDocument-&gt;saveXML($cond);
    echo &quot;&lt;pre&gt;&quot; . $xmlStr . &quot;&lt;/pre&gt;&quot;;
}
</pre>

        </div>
    </div>

    <div class="section" id="zend.gdata.health.profilelist"><div class="info"><h1 class="title">Profile List Feed</h1></div>
        

        <p class="para">NOTE: This feed is only available when using ClientLogin</p>

        <p class="para">
            Since ClientLogin requires a profile ID with each of its feeds, applications will likely
            want to query this feed first in order to select the appropriate profile. The profile
            list feed returns Atom entries corresponding each profile in the user&#039;s Google Health
            account. The profile ID is returned in the Atom <em class="emphasis">&lt;content&gt;</em> and
            the profile name in the <em class="emphasis">&lt;title&gt;</em> element.
        </p>

        <div class="section" id="zend.gdata.health.profilelist.query"><div class="info"><h1 class="title">Query The Feed</h1></div>
            

            <p class="para">
                To execute a query against the profile list feed, call the service&#039;s
                 <span class="methodname">getHealthProfileListFeed()</span> method:
            </p>

            <pre class="programlisting brush: php">
$client = Zend_Gdata_ClientLogin::getHttpClient(&#039;user@gmail.com&#039;,
                                                &#039;pa$$word&#039;,
                                                &#039;health&#039;);
$healthService = new Zend_Gdata_Health($client);
$feed = $healthService-&gt;getHealthProfileListFeed();

// print each profile&#039;s name and id
$entries = $feed-&gt;getEntries();
foreach ($entries as $entry) {
    echo &#039;&lt;p&gt;Profile name: &#039; . $entry-&gt;getProfileName() . &#039;&lt;br&gt;&#039;;
    echo &#039;profile ID: &#039; . $entry-&gt;getProfileID() . &#039;&lt;/p&gt;&#039;;
}
</pre>


            <p class="para">
                Once you&#039;ve determined which profile to use, call
                 <span class="methodname">setProfileID()</span> with the profileID as an argument. This will
                restrict subsequent <acronym class="acronym">API</acronym> requests to be against that particular
                profile:
            </p>

            <pre class="programlisting brush: php">
// use the first profile
$profileID = $feed-&gt;entry[0]-&gt;getProfileID();
$healthService-&gt;setProfileID($profileID);

$profileFeed = $healthService-&gt;getHealthProfileFeed();

$profileID = $healthService-&gt;getProfileID();
echo &#039;&lt;p&gt;&lt;b&gt;Queried profileID&lt;/b&gt;: &#039; . $profileID . &#039;&lt;/p&gt;&#039;;
</pre>

        </div>
    </div>

    <div class="section" id="zend.gdata.health.notice"><div class="info"><h1 class="title">Sending Notices to the Register Feed</h1></div>
        

        <p class="para">
            Individual posts to the register feed are known as notices. Notice are sent from
            third-party applications to inform the user of a new event. With AuthSub/OAuth, notices
            are the single means by which your application can add new CCR information into a user&#039;s
            profile. Notices can contain plain text (including certain <acronym class="acronym">XHTML</acronym>
            elements), a CCR document, or both. As an example, notices might be sent to remind users
            to pick up a prescription, or they might contain lab results in the CCR format.
        </p>

        <div class="section" id="zend.gdata.health.notice.send"><div class="info"><h1 class="title">Sending a notice</h1></div>
            

            <p class="para">
                Notices can be sent by using the  <span class="methodname">sendHealthNotice()</span> method
                for the Health service:
            </p>

            <pre class="programlisting brush: php">
$healthService = new Zend_Gdata_Health($client);

$subject = &quot;Title of your notice goes here&quot;;
$body = &quot;Notice body can contain &lt;b&gt;html&lt;/b&gt; entities&quot;;
$ccr = &#039;&lt;ContinuityOfCareRecord xmlns=&quot;urn:astm-org:CCR&quot;&gt;
  &lt;Body&gt;
   &lt;Problems&gt;
    &lt;Problem&gt;
      &lt;DateTime&gt;
        &lt;Type&gt;&lt;Text&gt;Start date&lt;/Text&gt;&lt;/Type&gt;
        &lt;ExactDateTime&gt;2007-04-04T07:00:00Z&lt;/ExactDateTime&gt;
      &lt;/DateTime&gt;
      &lt;Description&gt;
        &lt;Text&gt;Aortic valve disorders&lt;/Text&gt;
        &lt;Code&gt;
          &lt;Value&gt;410.10&lt;/Value&gt;
          &lt;CodingSystem&gt;ICD9&lt;/CodingSystem&gt;
          &lt;Version&gt;2004&lt;/Version&gt;
        &lt;/Code&gt;
      &lt;/Description&gt;
      &lt;Status&gt;&lt;Text&gt;Active&lt;/Text&gt;&lt;/Status&gt;
    &lt;/Problem&gt;
  &lt;/Problems&gt;
  &lt;/Body&gt;
&lt;/ContinuityOfCareRecord&gt;&#039;;

$responseEntry = $healthService-&gt;sendHealthNotice($subject,
                                                  $body,
                                                  &quot;html&quot;,
                                                  $ccr);
</pre>

        </div>
    </div>
</div>
        <hr />

            <table width="100%">
                <tr>
                    <td width="25%" style="text-align: left;">
                    <a href="zend.gdata.docs.html">Using Google Documents List Data API</a>
                    </td>

                    <td width="50%" style="text-align: center;">
                        <div class="up"><span class="up"><a href="zend.gdata.html">Zend_Gdata</a></span><br />
                        <span class="home"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></span></div>
                    </td>

                    <td width="25%" style="text-align: right;">
                        <div class="next" style="text-align: right; float: right;"><a href="zend.gdata.spreadsheets.html">Using Google Spreadsheets</a></div>
                    </td>
                </tr>
            </table>
</td>
        <td style="font-size: smaller;" width="15%"> <style type="text/css">
#leftbar {
	float: left;
	width: 186px;
	padding: 5px;
	font-size: smaller;
}
ul.toc {
	margin: 0px 5px 5px 5px;
	padding: 0px;
}
ul.toc li {
	font-size: 85%;
	margin: 1px 0 1px 1px;
	padding: 1px 0 1px 11px;
	list-style-type: none;
	background-repeat: no-repeat;
	background-position: center left;
}
ul.toc li.header {
	font-size: 115%;
	padding: 5px 0px 5px 11px;
	border-bottom: 1px solid #cccccc;
	margin-bottom: 5px;
}
ul.toc li.active {
	font-weight: bold;
}
ul.toc li a {
	text-decoration: none;
}
ul.toc li a:hover {
	text-decoration: underline;
}
</style>
 <ul class="toc">
  <li class="header home"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></li>
  <li class="header up"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></li>
  <li class="header up"><a href="reference.html">Refer&ecirc;ncia do Zend Framework</a></li>
  <li class="header up"><a href="zend.gdata.html">Zend_Gdata</a></li>
  <li><a href="zend.gdata.introduction.html">Introduction</a></li>
  <li><a href="zend.gdata.authsub.html">Authenticating with AuthSub</a></li>
  <li><a href="zend.gdata.books.html">Using the Book Search Data API</a></li>
  <li><a href="zend.gdata.clientlogin.html">Authenticating with ClientLogin</a></li>
  <li><a href="zend.gdata.calendar.html">Using Google Calendar</a></li>
  <li><a href="zend.gdata.docs.html">Using Google Documents List Data API</a></li>
  <li class="active"><a href="zend.gdata.health.html">Using Google Health</a></li>
  <li><a href="zend.gdata.spreadsheets.html">Using Google Spreadsheets</a></li>
  <li><a href="zend.gdata.gapps.html">Using Google Apps Provisioning</a></li>
  <li><a href="zend.gdata.gbase.html">Using Google Base</a></li>
  <li><a href="zend.gdata.photos.html">Using Picasa Web Albums</a></li>
  <li><a href="zend.gdata.youtube.html">Using the YouTube Data API</a></li>
  <li><a href="zend.gdata.exception.html">Catching Gdata Exceptions</a></li>
 </ul>
 </td>
    </tr>
</table>

<script type="text/javascript" src="../js/shCore.js"></script>
<script type="text/javascript" src="../js/shAutoloader.js"></script>
<script type="text/javascript" src="../js/main.js"></script>

</body>
</html>